@爆米花
3年前 提问
1个回答
RPO 是什么
上官雨宝
3年前
官方采纳
RPO,全称(Relative Path Overwirte),也就是相对路径覆盖,利用客户端和服务端的差异,通过相对路径来引入我们想要的js或者css文件,从而实现某种攻击。通俗来说就是浏览器与服务器两者对请求的解析不一致,并没有做到同步解析。因而我们可以通过相对路径来引入其他的资源文件,以至于达到我们的目的。
就目前来看此攻击方法依赖于浏览器和网络服务器的反应,基于服务器的Web缓存技术和配置差异,以及服务器和客户端浏览器的解析差异,利用前端代码中加载的css/js的相对路径来加载其他文件,最终浏览器将服务器返回的不是css/js的文件当做css/js来解析,从而导致XSS,信息泄露等漏洞产生。
这里以www.xxx.com/test
为例。
第一步:
比如我们输入一个请求http://www.xxx.com/test/%2f..%2f
,该请求送至服务端进行解析结果为www.xxx.com
,因为%2f相当于/,/test/%2f..%2f则相当于/test/../,即/根目录,因此此时服务端会返回www.xxx.com
中的内容。
第二步:
但是客户端浏览器这边并不会正常的识别%2f为/,他会认为%2f..%2f只是一个界面,而该页面的最终路径为/test/。页面中如果出现如style.css的超链接,那么访问该链接时会自动拼接到www.xxx.com/test/style.css
后,即拼接到test/这个路径下。
第三步:
因此加载css时向服务端发送的请求为www.xxx.com/test/style.css
,再利用服务端的一些配置,他会返回找到的有效的数据如www.xxx.com/test/
中的内容,返回给客户端。
第四步:
客户端便加载次内容并作为css内容,从而造成RPO攻击。